var a = 12;
var b = a;
b = 13;
console.log(a); //=>12

var obj1 = {n: 100};
var obj2 = obj1;
obj2['n'] = 200;
console.log(obj1.n); //=>200


/*
 * 浅分析JS的运行机制
 *  1、当浏览器(它的内核\引擎)渲染和解析JS的时候，会提供一个供JS代码运行的环境，我们把这个环境称之为“全局作用域(global/window scope)”
 *
 *  2、代码自上而下执行（之前还有一个变量提升阶段）
 *   =>基本数据类型的值会存储在当前作用域下
 *    var a = 12;
 *    1)首先开辟一个空间存储12
 *    2)在当前作用域中声明一个变量a （var a）
 *    3)让声明的变量和存储的12进行关联（把存储的12赋值给a =>赋值操作叫做定义）
 *
 *    基本数据类型（也叫作值类型），是按照值来操作的：把原有的值复制一份，放到新的空间或者位置上，和原来的值没有关系
 *
 *   =>引用数据类型的值不能直接存储到当前的作用域下（因为可能存储的内容过于复杂），我们需要先开辟一个新的空间（理解为仓库），把内容存储到这个空间中
 *   var obj1 = {n: 100};
 *   1)首先开辟一个新的内存空间，把对象中的键值对依次存储起来（为了保证后面可以找到这个空间，此空间有一个16进制的地址）
 *   2)声明一个变量
 *   3)让变量和空间地址关联在一起（把空间地址赋值给变量）
 *
 *   引用类型不是按照值来操作，它操作的是空间的引用地址：把原来空间的地址赋值给新的变量，但是原来的空间没有被克隆，还是一个空间，这样就会出现多个变量关联的是相同的空间，相互之间就会存在影响了
 */